package ae.pcfc.cldos.online.common.manager;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import ae.pcfc.cldos.online.common.exception.FNPAppException;
import ae.pcfc.cldos.online.common.exception.PaymentException;
import ae.pcfc.cldos.online.common.vo.fnp.FNPPaymentAdviceVO;
import ae.pcfc.cldos.online.fnp.exception.FNPException;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPAccountTypeVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPCatalogVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPFinalPaymentResponseVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPParameterVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPPaymentAdviceRspnsVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPPrepaidTransactionVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPReportReqVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPReportResponseVO;
import ae.pcfc.cldos.online.fnp.service.client.vo.FNPTransReportResponseVO;


/**
 * @author akhader
 *
 */
public interface FNPManager {

	/**
	 * @param appId
	 * @param userName
	 * @param visaService
	 * @return FNPPaymentAdviceRspnsVO
	 */

	public FNPPaymentAdviceVO generatePayment(Long appId, String userName, String visaService,List<FNPParameterVO> fnpParams,String overLoadEmpCode,String clientRefNo) throws Exception;

	/**
	 * @param appId
	 * @param userName
	 * @param paymentAdviceNo
	 * @return boolean
	 */
	public boolean cancelPayment(String appId,String userName,String paymentAdviceNo,String clientRefNo);
	
	public boolean cancelPayment(String appId,String userName,String paymentAdviceNo, boolean unblock);
	/**
	 * @param appId
	 * @param userName
	 * @param paymentAdviceNo
	 * @return FNPFinalPaymentResponseVO
	 */

	public FNPFinalPaymentResponseVO finalizePayment(String appId,String userName,String paymentAdviceNo) throws PaymentException , IOException;
	
	/**
	 * 
	 * @param username
	 * @return
	 */
	public FNPAccountTypeVO enquireDeposits(String clentId);
	
	
	/**
	 * 
	 * @param fnpServiceCodeList
	 * @return
	 */
	public List<FNPCatalogVO> retreiveFNPCatalog(List<String> fnpServiceCodeList) throws FNPAppException;
	/**
	 * @param appId
	 * @param userName
	 * @param visaService
	 * @return FNPPaymentAdviceRspnsVO
	 */
	public FNPPaymentAdviceRspnsVO previewPaymentAdvice(String userName, String visaService,List<FNPParameterVO> fnpParams,String overLoadEmpCode);
	/**
	 * @param clientId
	 * @param startDate
	 * @param endDate
	 * @return
	 * @throws FNPException
	 */
	public List<FNPPrepaidTransactionVO> enquireDepositTransaction(String clientId, Date startDate, Date endDate);
	
	/**
	 * @param userName
	 * @param startDate
	 * @param endDate
	 * @param type
	 * @param actual
	 * @return
	 */
	public FNPReportResponseVO generateClientAccountReport(String userName,Date startDate, Date endDate,String type,boolean actual);
	/**
	 * @param userName
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<FNPTransReportResponseVO> retreiveFNPTransactionReport(String userName,Date startDate, Date endDate);
	
}
